perm filename SCMSS.F4[NEW,LCS]28 blob
sn#592286 filedate 1981-06-07 generic text, type T, neo UTF8
00100 C****** SCMSS, A2READ, INPOUT *********** 12/1/75
00200 SUBROUTINE SCMSS
00300 COMMON /PLTR/PLT,RHT,DIS/PTR/KWDS(1)
00400 1 /MKX/KSLA,ISM,LESS,IGT,NNO(5),MINUS
00450 CC 1 STEM,STUP,NTC,PS2,RAM,RDD,ITB,POSB /JCHAR/IXX,ISEMI,IBLA
00500 COMMON/RINP/R(10,85),RPOS(2,50) /RMOD/RMODE2,SET4,IBEAM,NOSET,
00600 1 STEM,STUP,NTC,PS2,RAM,RDD,ITB,POSB
00700 1 /A2Z/LAA,LBB,A1(4),LGG,A2(6),LNN,LOH,A3(3),LSS,LTT,A4(4),LYY
00800 1 /NUM/NUM(9),N9
00900 COMMON R2,JA,G,H,R3,U(39)/SCM/V(78),I,LCNT,STAFF,JLIST(200),REND
01000 C JLIST WILL SOMETIMES BE USED(WIPED OUT) FOR R(X,Y) OVERFLOW(>50 ITEMS.)
01100 DIMENSION RLIST(200),NOMOR(6),WARN(6),ISV(5)
01200 C /SCX/ ALSO IN WORDS, NEWR
01350 COMMON/SCX/ICM,NEG,IDOT,IEQ,ILP,IRP,IPL,ISTAR,ICOL,ISEMI,IDB
01375 1,IBLA,JF(3),IAT,JAL(14),RB,RC,JZ,IRHY,JD,KA,KB,IZ
01400 1/STF/RSTFAC(8),RSTJ2 /LIMIT/LIMIT,ITEM,LL,IS,IX
01500 1 /FRMT/F78F(1),FA1(1),FA5(1) /IDEV/IDEV
01600 1/XRN/RN(1) /ALF/INP(72),ML /POS/POS1,POS2,PSFB
01700 COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JN,DBST
01800 1,NFLG,JXX,ISEMX,JG,VX(50),IAMP,K,KN,M,MODE,IBLX
01900 EQUIVALENCE (VX1,VX(1)),(INP1,INP(1)),(VX2,VX(2)),(VX3,VX(3)),
02000 1(VX4,VX(4)),(VX5,VX(5)),(JLIST,RLIST)
02100 1 ,(INP2,INP(2)),(INP3,INP(3)),(INP4,INP(4))
02200 CC 1,(ISTAR,JALPHA(8)),(ICOL,JALPHA(9)),(IRP,JALPHA(6)),
02300 CC 1(ILP,JALPHA(5)),(NEG,JALPHA(2)),(IAT,JALPHA(16)),(IDOT,
02400 CC 1JALPHA(3))
02500 C--THESE ARE IN 'RESTS' NOW. DATA IXX/'X'/,LCNT/1/,ISEMI/';'/,IBLA/' '/
02600 JDEV=IDEV
02700 JBKUP=0
02800 C JBKUP IS TO TRAP MORE THAN ONE BACKUP IN A ROW.
02900 1177 RB=0
03000 IF(JA.NE.140)GO TO 11
03100 77 MODE=1
03200 IF(IDEV.NE.5)GO TO 177
03300 C NEXT LOOKS FOR NAME TO SAVE INPUT (TYPE 'INn NAME')
03400 DO 1377 K=3,72
03500 L=K
03600 IZ=INP(K)
03700 1377 IF(IZ.LT.0)GO TO 2377
03800 C JUMP OUT IF LETTER FOUND FIRST
03900 NAMSC='INPUT'
04000 GO TO 3377
04100 2377 CALL NAMEXT(INP(L),NAMSC,K)
04200 3377 CALL OFILE(21,NAMSC)
04300 C12/80 WRITE(21,2114)INP
04400 CALL INPOUT
04500 C WRITE OUT 'IN' ETC.
04600 177 IBEAM=-1
04700 IZ=0
04800 POS2=0
04900 POS1=0
05000 CC THIS IS SET IN MSX NOW **** RMODE2=R3
05100 91 CALL TYPCRL
05200 CALL TYPSTR('STAFF=')
05300 CALL TYPFLT(STAFF)
05400 IF(SET4.EQ.999.)GO TO 911
05500 912 CALL TYPSTR(' SPACING STAFF=')
05600 CALL TYPFLT(SET4)
05700 911 CALL TYPCRL
05800 GO TO 111
05900
06000 11 RB=0
06100 IF(MODE.LE.2)GO TO 111
06200 IF(IDEV.NE.5)GO TO 111
06300 C SKIP IF READING AN EDIT FILE
06400 CALL DPYOUT(3)
06500 CALL ACCPOG(1)
06600 CALL DPYOUT(1)
06700 C THIS TO DISPLAY NOTE NUMS. ON DATA-DISK.
06800 GO TO 111
06900 467 IDEV=5
07000 GO TO 4333
07100 444 SET4=RA
07200 GO TO 912
07300 111 CALL SETUP
07400 IF(STUP.GE.0)GO TO 8
07500 C SKIPS IF USING SETUP ON SOME STAFF
07600 IF(POS2.NE.0)GO TO 4334
07700 C JUMP IF POS1, POS2, ETC. WERE SET UP IN FILE (* SP ST POS1 POS2 X)
07800 4333 IF(IDEV.EQ.5)CALL TYPSTR('TYPE POS1, POS2, (SPC) ')
07900 READ(IDEV,F78F,END=467)POS1,POS2,PSFB
08000 C 'REREAD' IS NEEDED BECAUSE OF SOME FORTRAN BUG!!!!!!!!!!!!!!!!!!!!!!
08100 C DON'T USE INVIS. RESTS WITH SPACING FEATURE!!!!
08200 REREAD 2114,INP
08300 C IF(IDEV.NE.5)GO TO 5333
08400 C WRITE(21,2114)INP
08500 IF(IDEV.EQ.5)CALL INPOUT
08600 C12/80 IF(IDEV.EQ.5)WRITE(21,2114)INP
08700 C WRITE OUT SPACING INFO
08800 5333 CALL A2READ(K,RA)
08900 IF(K.EQ.'SP')GO TO 444
09000 C TYPE "SPn" TO SET SPACING STAFF AT THIS POINT.
09100 IF(K.EQ.IAT)GO TO 467
09200 CATCH '@' WHEN POS1 AND P2 ARE EXPECTED.
09300 IF(K.EQ.LESS)GO TO 467
09400 IF(K.NE.IGT)GO TO 567
09500 IDEV=1
09600 GO TO 4333
09700 567 IF(POS2.EQ.0)POS2=200.
09800 IF(POS1.GE.POS2)GO TO 4333
09900 C TYPE ANY POSITIVE 3RD NUM. FOR PSUEDO-FIBONACCI SPACING OF RHYTH.
10000 IF(INP1.GT.0)GO TO 4334
10100 CCC NOW FOUND LETTER WHERE WE WANT NUMB.
10200 IF(IDEV.EQ.5)GO TO 4333
10300 CALL TYPSTR(' POS1, POS2 MISSING')
10400 CALL TYPCRL
10500 GO TO 999
10600 4334 STUP=STUP-PSFB
10700
10800 8 CALL TYPCRL
10900 367 GO TO (1,2,3,4,5,677)MODE
11000 GO TO 80041
11100
11200 2111 IDEV=JDEV
11300 RETURN
11400 CC168 IF(NOSET.EQ.0)RETURN
11500
11600 80052 FORMAT(F,A4,A5,2F)
11700 267 IDEV=5
11800 IF(MODE.EQ.3)CALL NOTNUM
11900 GO TO 2111
12000 4 IF(IDEV.EQ.5)CALL TYPSTR('ADD BEAMS? ')
12100 330 READ(IDEV,2114,END=677)INP
12200 CALL LULOOP
12300 IF(INP1.EQ.LGG)GO TO 677
12400 C TYPE 'GO' TO PASS LATER ITEMS
12500 IF(INP1.EQ.N9.AND.INP2.EQ.INP1)GO TO 99
12600 IF(INP1.EQ.LBB)GO TO 99
12700 IF(INP1.EQ.LYY)GO TO 1
12800 C FOR BEAMS? TYPE 'nB' INSTEAD OF 'Y' FOR AUTOMATIC.
12900 IF(INP1.EQ.LNN)GO TO 2000
13000 IF(INP1.EQ.ISEMI)GO TO 2000
13100 IF(INP1.EQ.LESS)GO TO 267
13200 IF(INP1.NE.IGT)GO TO 767
13300 IDEV=1
13400 766 GO TO(1,2,3,4,5)MODE
13500 767 IF(INP1.NE.IBLA)GO TO 5177
13600 2000 MODE=MODE+1
13700 IF(IDEV.EQ.5)WRITE(21,2114)INP4
13800 GO TO 11
13900 690 REND=1
14000 GO TO 2111
14100 3 IF(IDEV.EQ.5)CALL TYPSTR('ADD MARKS? ')
14200 GO TO 330
14300 5 IF(IDEV.EQ.5)CALL TYPSTR('ADD SLURS? ')
14400 GO TO 330
14500
14600 8006 MODE=MODE+1
14700 IF(MODE.GT.5)GO TO 677
14800 IF(IDEV.NE.5)GO TO 367
14900 C RETURN ONLY IF IN TTY MODE. (NOT READ∪NG A FILE)
15000 GO TO 2111
15100 677 IF(IDEV.NE.5)GO TO 68
15200 END FILE 21
15300 CALL TYPSTR('INPUT SAVED ON ')
15400 CALL TYPSTR(NAMSC)
15500 CALL TYPSTR('.DAT')
15600 CALL TYPCRL
15700 68 REND=-1
15800 GO TO 2111
15900
16000 99 IF(INP3.EQ.N9)GO TO 999
16100 C ELSE GET ANOTHER CHANCE TO SAY 'NO'. 99=BACKUP, 999=ESCAPE
16200 IF(MODE.GE.4)GO TO 1999
16300 IF(JBKUP.LT.0)GO TO 199
16400 JBKUP=-1
16500 MODE=MODE-1
16600 IF(MODE.EQ.0)GO TO 999
16700 IS=ISV(MODE)
16800 GO TO 11
16900 C INSERT BACKUP ROUTINE
17000 999 REND=99
17100 GO TO 2111
17200 C FIX BACKUPS********
17300 199 CALL TYPSTR('ONLY 1 BACKUP AT A TIME. ')
17400 299 CALL TYPSTR('CONTINUE, THEN EDIT .DAT FILE LATER, OR TYPE 999.')
17500 CALL TYPCRL
17600 GO TO 367
17700 1999 CALL TYPSTR('CANNOT BACKUP AFTER MARKS INPUT.')
17800 CALL TYPCRL
17900 GO TO 299
18000
18100 8015 RA=0
18200 DO 15 J=1,I-1
18300 15 RA=RA+4./V(J)
18400 K=IRHY-I+1
18500 CALL TYPSTR('TOTAL RHY=')
18600 CALL TYPFLT(RA)
18700 CALL TYPSTR(' QTRS. ')
18800 CALL TYPINT(K)
18900 CALL TYPSTR(' MORE RHYTHMS NEEDED')
19000 CALL TYPCRL
19100 IDEV=5
19200 C RETURNS TO TTY MODE IF READING A FILE WITH 'FILE' FEATURE.
19300 2 IF(IDEV.EQ.5)CALL TYPSTR('TYPE ')
19400 CALL TYPINT(IRHY)
19500 CALL TYPSTR(' RHYTHMS')
19600 CALL TYPCRL
19700
19800 1 ISV(MODE)=IS
19900 CALL TYPE
20000 CC IF(MODE.EQ.2)CALL RHQUIK
20100 C RHQUIK ALLOWS TYPING RHYTHMS ON BOTTOM LEVEL OF KYBD.
20200 C Z=WHOLE, X=HALF, C=QUARTER, V=EIGHTH, B=SIXTEENTH.
20300 IF(INP1.NE.IAT)GO TO 1001
20400 C '@' STARTS MODE2 INPUT
20500 IF(INP2.NE.IBLA)GO TO 1001
20600 C BUT NOT IF IT'S REALLY A MOTIVE CALL
20700 IF(IDEV.EQ.5)END FILE 21
20800 C CLOSE THE BACKUP FILE
20900 CALL PRESCN
21000 CALL IFILE(22,'MODE2')
21100 READ(22,2114)INP
21200 CALL LULOOP
21300 IDEV=22
21400 C IDEV CHANGES BACK BEFORE RETURN TO MAIN.
21500 Z=STUP
21600 CALL SETUP
21700 C MUST RECALL SETUP BECAUSE SOME ARRAYS WERE USED IN PRESCN.(??)
21800 STUP=Z
21900 GO TO 6177
22000 1001 CALL LULOOP
22100 CALL A2READ(RA,RB)
22200 IF(RA.NE.'SP')GO TO 5177
22300 SET4=RB
22400 C CAN SET SPACER HERE
22500 GO TO 1177
22600 5177 IF(INP1.EQ.IBLA) GO TO 1
22700 IF(INP1.NE.N9)GO TO 80041
22800 IF(INP2.EQ.N9)GO TO 99
22900 C TYPE '99' TO BACK-UP
23000 80041 IF(IDEV.EQ.5)CALL INPOUT
23100 C12/80 80041 IF(IDEV.EQ.5)WRITE(21,2114)INP
23200 6177 CALL LNEND
23300 IF(INP1.EQ.ISEMI)GO TO 7774
23400 C INP1=; MEANS UNTERMINATED LINE WAS TYPED. GO TRY AGAIN.
23500 GO TO(333,433,533)MODE-2
23600 C GO TO MARKZ, BEAMS, SLURZ
23700 RETRO=-1.
23800 I=1
23900 PARENS=0
24000 MOT=0
24100 JZ=1
24200 IAMP=0
24300 C IAMP IS 'BLANK LINE'FLAG ON PP1-3.
24400 KL=0
24500 RA=0
24600 IF(MODE.EQ.2)GO TO 2408
24700 C NEXT CHECKS FOR STAFF NUM AT FRONT OF INPUT LINE#1.
24800 IF(INP1.NE.LSS)GO TO 2408
24900 IF(INP2.NE.LTT)GO TO 2408
25000 K=1
25100 L=3
25200 IF(INP3.NE.MINUS)GO TO 1277
25300 K=-1
25400 L=4
25500 1277 STAFF=NALF(INP(L))*K
25600 2277 MLX=L+1
25700 IF(INP(MLX).NE.KSLA)GO TO 2277
25800 MLX=MLX+1
25900 GO TO 3277
26000 2408 MLX=1
26100 3277 L=-1
26200 C GO SORT OUT THE NEW FORMAT
26300 DO 2999 K=1,72
26400 N=INP(K)
26500 IF(N.EQ.IBLA)GO TO 2999
26600 L=0
26700 IF(N.EQ.ISTAR)GO TO 277
26800 IF(N.NE.ISEMI)GO TO 2999
26900 C READS 72 CHARS. INCLUDING ;.
27000 277 INP(K+1)=ISEMI
27100 GO TO 1773
27200 C --- X/Y/Z* --- WITH NO SEMICOLON WORKS FOR THIS PROG. ONLY!
27300 2999 CONTINUE
27400 7774 CALL TYPSTR('****** TRY AGAIN ***** ')
27500 CALL TYPCRL
27600 GO TO 766
27700 CC GO TO 1
27800
27900 1299 IF(JZ.NE.0)GO TO 1773
28000 7773 CALL TYPE
28100 CC IF(MODE.EQ.2)CALL RHQUIK
28200 C FOR Z=W, X=H, C=Q RHYTHMS, ETC.
28300
28400 IF(INP1.EQ.IBLA)GO TO 7773
28500 IF(IDEV.EQ.5)CALL INPOUT
28600 C12/80 IF(IDEV.EQ.5)WRITE(21,2114)INP
28700 CALL LULOOP
28800 77732 CALL LNEND
28900 JM=-1
29000 JZ=0
29100 GO TO 2408
29200 C 'LISTS' MUST END WITH ;
29300 1773 JZ=0
29400 DBST=1.
29500 IF(XDBST)DBST=-DBST
29600 XDBST=0
29700 17731 ML=MLX
29800 IF(PARENS.LE.0.)GO TO 975
29900 C PARENS=-1, OPENS; =1, CLOSES; =0, NONE
30000 3362 PARENS=0
30100 MOT=I-LMOT
30200 IF(LCNT+MOT.LT.198)GO TO 33621
30300 CALL TYPSTR(' NO ROOM FOR MOTIVE ')
30400 CALL TYPCHR(JMOT,1)
30500 CALL TYPCRL
30600 GO TO 1
30700 33621 JLIST(LCNT+1)=MOT
30800 LCNT=LCNT+2
30900 DO 2140 JG=0,MOT-1
31000 2140 RLIST(LCNT+JG)=V(LMOT+JG)
31100 LCNT=LCNT+MOT
31200 IF(IAMP)GO TO 3013
31300 C FOR CLOSE PARENS ON LAST ITEM
31400 C STORE MOTIVE IN RLIST ARRAY
31500
31600 975 DO 236 JDD=ML,72
31700 JD=JDD
31800 N=INP(JD)
31900 C ((((())))) MAY 13,71 /Z (D4/E/X 2 3/) CS/ ETC. CAN USE 26 LABELS.
32000 IF(N.EQ.ILP)GO TO 477
32100 IF(N.EQ.IRP)GO TO 477
32200 IF(N.NE.ICOL)GO TO 2361
32300 477 INP(JD)=IBLA
32400 IF(N.NE.ICOL)GO TO 1113
32500 XDBST=-1.
32600 GO TO 5362
32700 C GO CHANGE IT TO A SEMIC. !!! CAN'T END LINE WITH :
32800 C SO NXT NOTE WILL BE DBST (TYPE /F:A:C/ ETC.)
32900 C DBSTS WILL BE ONLY ONE 'REP' UNIT X*0Z%~#&@
33000 1113 L=JD-1
33100 5113 IF(INP(L).NE.IBLA)GO TO 2113
33200 L=L-1
33300 GO TO 5113
33400 2113 IF(N.EQ.IRP)GO TO 3361
33500 C ONLY ONE () AS YET, NO NESTING
33600 1140 JMOT=INP(L)
33700 C MOTIVE NAME
33800 DO 11401 JC=1,LCNT-1
33900 IF(JMOT.NE.JLIST(JC))GO TO 11401
34000 C FINDS DUPLICATE IDENTIFIER
34100 CALL TYPSTR(' MOTIVIC (')
34200 CALL TYPCHR(JMOT,1)
34300 CALL TYPSTR(') USED TWICE')
34400 CALL TYPCRL
34500 JLIST(JC)=0
34600 C ZERO OUT PREVIOUS USE OF IDENTIFIER.
34700 11401 CONTINUE
34800 JLIST(LCNT)=JMOT
34900 PARENS=-1.
35000 C A PARENTH IS OPEN
35100 INP(L)=IBLA
35200 LMOT=I
35300 C LMOT IS CURRENT POINT IN V ARRAY
35400 GO TO 236
35500 3361 IF(PARENS.NE.0)GO TO 33612
35600 CALL TYPSTR('PARENTH ERROR - GOING ON')
35700 CALL TYPCRL
35800 33611 INP(JD)=IBLA
35900 GO TO 236
36000 33612 PARENS=1.
36100 C SETS PARENS CLOSED FLAG
36200 GO TO 33611
36300 C NO INVERSIONS POSSIBLE NOW
36400 2361 IF(N.NE.IAT)GO TO 5361
36500 DO 113 L=1,72
36600 K=JD+L
36700 C K IS USED AT 240!!!
36800 JG=INP(K)
36900 IF(JG.NE.NEG)GO TO 7113
37000 RETRO=0
37100 INP(K)=IBLA
37200 GO TO 113
37300 7113 IF(JG.NE.IBLA)GO TO 4113
37400 113 CONTINUE
37500 4113 DO 6361 L=1,LCNT
37600 IF(JG.NE.JLIST(L))GO TO 6361
37700 VX1=0
37800 DO 40 M=JD+2,72
37900 JG=INP(M)
38000 IF(JG.EQ.IBLA)GO TO 40
38100 IF(JG.EQ.KSLA)GO TO 140
38200 IF(JG.EQ.ISEMI)GO TO 140
38300 IF(JG.EQ.ISTAR)GO TO 140
38400 ML=M
38500 GO TO 240
38600 40 CONTINUE
38700 240 JC=JM
38800 JM=-1
38900 INP(K)=IBLA
39000 JN=0
39100 C MUST BE ZERO IN SCANR
39200 CALL SCANR
39300 JM=JC
39400 140 JC=1
39500 KN=L+2
39600 M=KN+JLIST(L+1)
39700 IF(RETRO)GO TO 940
39800 KN=M-1
39900 M=L+1
40000 JC=-1
40100 RETRO=-1.
40200
40300 940 Z=RLIST(KN)
40400 IF(VX1.EQ.0)GO TO 540
40500 C " @Q N " WHERE N= DIATONIC STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
40600 IF(MODE.EQ.1)GO TO 440
40700 C MODE 1 IS NOTES, 2 IS RHY.
40800 V(I)=Z*VX1
40900 GO TO 7361
41000 440 IF(ABS(Z).GE.2000.)GO TO 540
41100 C SKIPS NON-NOTES
41200 RB=VX1
41300 IF(Z)RB=-RB
41400 C NOW TRANSPOSES BY DIAT. STEPS ONLY 100S=FLAT, 200S=SHARP, 300S=NAT
41500 C NEG NUMS ARE CHORD NOTES.
41600 V(I)=Z+RB
41700 GO TO 7361
41800 540 V(I)=Z
41900 7361 I=I+1
42000 KN=KN+JC
42100 IF(KN.NE.M)GO TO 940
42200
42300 RB=V(I-1)
42400 DO 8361 LI=JD,72
42500 JG=INP(LI)
42600 INP(LI)=IBLA
42700 IF(JG.EQ.KSLA)GO TO 9361
42800 IF(JG.EQ.ISEMI)GO TO 93611
42900 8361 IF(JG.EQ.ISTAR)IAMP=-1
43000 9361 MLX=LI
43100 IF(IAMP.EQ.0)GO TO 17731
43200 JZ=-1
43300 93611 IF(IAMP)GO TO 3013
43400 GO TO 7773
43500 6361 CONTINUE
43600 CALL TYPSTR(' MOTIVIC (')
43700 CALL TYPCHR(JG,1)
43800 CALL TYPSTR(') NOT FOUND')
43900 CALL TYPCRL
44000 GO TO 11401
44100 C @@@@@@@@@@@@@@@@@@@@@@@@@@
44200 5361 IF(N.NE.KSLA)GO TO 636
44300 5362 MLX=JD+1
44400 JZ=-1
44500 INP(JD)=ISEMI
44600 436 IF(INP(MLX).NE.IBLA)GO TO 103
44700 MLX=MLX+1
44800 GO TO 436
44900 636 IF(N.EQ.ISEMI)GO TO 103
45000 936 IF(N.NE.IDOT)GO TO 736
45100 L=INP(JD+1)
45200 KL=NALF(L)
45300 IF(L.LE.0)GO TO 577
45400 IF(KL.LT.0)GO TO 577
45500 IF(KL.LE.9)GO TO 236
45600 C JUMP IF IT'S A NUMBER
45700 577 IF(MODE.EQ.2)INP(JD)=1
45800 C :::::::::******* ↑↑↑↑ MODE #?
45900 GO TO 236
46000 C CHANGES DOTTED RHYTHMS TO '1'S.
46100 736 IF(N.NE.ISTAR)GO TO 236
46200 IAMP=-1
46300 INP(JD)=ISEMI
46400 GO TO 103
46500 236 CONTINUE
46600
00100 2114 FORMAT(72A1)
00200 CC21141 FORMAT(I,72A1)
00300
00400 5016 IF(IAMP.GE.0)GO TO 1299
00500 IF(PARENS.NE.0)GO TO 3362
00600 C PARENS ARE STILL OPEN?
00700 GO TO 3013
00800 103 K=INP(ML)
00900
01000 C LAST SECTION
01100 IF(K.EQ.ISEMI)GO TO 1014
01200 C*********** MODE #?
01300 IF(K.NE.IBLA) GO TO 1899
01400 ML=ML+1
01500 GO TO 103
01600 1899 JN=0
01700 C MUST BE ZERO IN SCANR
01800 VX4=0
01900 NOAC=0
02000 CALL SCANR
02100 IF(VX1.EQ.-99.)GO TO 4022
02200 C NO MORE COMPOSITES IN RHYTH. DOTS ARE INDICATED BY 100S.
02300 C RHYTH. NUMB IS KEPT HERE. DOTTED QUARTER IS NOW 104. DBL..=204
02400 17 IF(MODE.NE.2)GO TO 117
02500 IF(JJ.EQ.1)GO TO 117
02600 IF(VX2.EQ.0)GO TO 117
02700 C VX2=0 IF "X" IS USED. (8X3 FORMS VX1=8, VX2=0, VX3=3)
02800 RB=0
02900 DO 2117 K=1,JJ
03000 2117 RB=RB+4./VX(K)
03100 VX1=4./RB
03200 C FOR COMPOSITE RHYTHMS. (USEFUL FOR 'WHOLE' RESTS IN 5/4, ETC.)
03300 JJ=1
03400 117 V(I)=VX1
03500 IF(VX4.EQ.0)GO TO 115
03600 IF(MODE.NE.1)GO TO 115
03700 I=I+1
03800 C FOR + OR -. AUTO OCTAVES, ETC.
03900 V(I)=-VX1-VX4
04000 115 IF(JJ.LE.1)GO TO 114
04100 IF(MODE.NE.1)GO TO 171
04200 IF(VX2.EQ.0)GO TO 171
04300 C JUMP IF RHY OR 'X 4' ETC.
04400 V(I)=18000.0+VX1*10.0+VX2/10.0
04500 C PACKS 2 METER NUMS INTO ONE SLOT (18xyz.n xy=top, zn=bottom)
04600 114 I=I+1
04700 GO TO 5016
04800 171 JC=1
04900 JD=VX(JJ)-1
05000 I=I+1
05100 GO TO 5005
05200 1014 JD=1
05300 JC=1
05400 C X4/ CREATES REP 1,4; A/// CREATES REP 1,3;
05500 GO TO 5005
05600 4022 JC=VX2+.3
05700 JD=VX3-.5
05800 IF(MODE.EQ.1)NOAC=-1
05900 C ACCIS WILL NOT!! REPEAT UNLESS 100 IS ADDED TO 1ST NUM.******6/78
06000 IF(JJ.EQ.2)JD=1
06100 C JD=HOW MANY TIMES, JC=HOW MANY NOTES
06200 IF(JC.LT.100)GO TO 5005
06300 C ADD 100 TO NUM OF NOTES TO REPEAT ACCIS WITH 'REP N1, N2'.
06400 JC=JC-100
06500 NOAC=0
06600 5005 N=0
06700 DO 3005 K=I-1,1,-1
06800 IF(V(K))GO TO 3005
06900 IF(V(K).LT.3000)N=N+1
07000 C COUNTS RESTS AND NOTES ONLY (NO CHORD NOTES)
07100 3005 IF(N.EQ.JC)GO TO 4005
07200 4005 IF(JC.GT.1)GO TO 7005
07300 IF(MODE.EQ.1)NOAC=-1
07400 C 5/76 ******* AF/// WILL CREATE AF/A//-- AN:FS/// = AN:FS/A:F// *******
07500 C ACCIS ARE DROPPED WITH / OR Xn REPEAT. (BUT NOT WITH 'REP' OR '/X n,n/')
07600 7005 JC=I-K
07700 C ALL THIS IS TO FIND COMPLETE CHORDS, BARS, ETC. TO REPEAT.
07800 C REPS WILL ONLY COUNT RHYTHMIC UNITS.!
07900 DO 1005 K=1,JD
08000 NL=I+JC-1
08100 DO 2005 L=I,NL
08200 KN=L-JC
08300 RB=V(KN)
08400 IF(NOAC.GE.0)GO TO 2005
08500 IF(ABS(RB).GE.2000)GO TO 2005
08600 C SKIP OVER IF NOT A NOTE
08700 RB=AMOD(RB,100.0)+1000.0
08800 IF(V(KN))RB=RB-2000.0
08900 C DROPS ACCIS WHEN SLASH REP. OR 'X' IS USED.
09000 2005 V(L)=RB
09100 1005 I=I+JC
09200 GO TO 5016
09300
09400 3013 IF(MODE.NE.2)GO TO 771
09500 IF(I-1.NE.IRHY)GO TO 8015
09600 C WRONG NUMBER OF ITEMS
09700 771 V(I)=-99.
09800 IF(MODE.NE.1)GO TO 132
09900 C FOR ADDED NOTES ON SPACING STAFF
10000 CALL NOTES
10100 C SAVES TOTAL OF ITEMS FOR LABEL 168
10200 67 CALL NEWR
10300 IX=IS
10400 C SAVE PTR TO RN ARRAY FOR TREM. OVER BEAM LATER. (IN 'BEAMS.F4')
10500 GO TO 8006
10600 132 CALL RHYTH
10700 C =50 IS RHYTHM FOR TEXT
10800 GO TO 67
10900 134 IF(IDEV.EQ.5)CALL INPOUT
11000 C12/80 134 IF(IDEV.EQ.5)WRITE(21,2114)INP
11100 C WRITES TYPED IN REPLY TO 'ADD BEAMS?'
11200 C ACCENTS ARE IN MARKZ SUBROUTINE
11300 GO TO 8006
11400 533 CALL SLURZ
11500 GO TO 8006
11600 433 CALL BEAMS
11700 C ADJUSTS STEMS (IBEAM=0) IF BEAMS WERE ENTERED.
11800 IBEAM=0
11900 GO TO 8006
12000 333 CALL MARKZ
12100 135 K=IS
12200 CALL NEWR
12300 IS=K
12400 C ↑↑↑↑↑↑ TO ADD NEW ITEMS, SUCH AS PPP, MP, CRESC., ETC.(SEE 'MARKS')
12500 GO TO 8006
12600 END
12700
12800 SUBROUTINE A2READ(A,B)
12900 REREAD 1,A,B
13000 CALL LO2UP(A)
13100 1 FORMAT(A2,F)
13200 END
13300 SUBROUTINE INPOUT
13400 C WRITES TYPED INPUT TO FILE 'INPUT.DAT' (OR OTHER NAME)
13500 COMMON /ALF/INP(1)
13600 DO 1 K=72,1,-1
13700 1 IF(INP(K).NE.' ')GO TO 2
13800 K=1
13900 2 WRITE(21,2114)(INP(J),J=1,K)
14000 2114 FORMAT(72A1)
14100 END